Debugging refers to the process of inspecting and observing a computer program behavior and state during execution of the program. Traditional debugging tools allow program execution to be stopped at a specific line of code or when a specific condition occurs, at which time the developer can inspect program state. For example, for variables that are in scope, the developer can see the values of the variables at the time that the program execution broke. The developer can also run new code in the context of the debugged program and observe the new state of the application and its data structures. This practice is commonly used for the purpose of finding and correcting bugs (defects) in a computer program so that it executes as expected and in the process of writing new applications or functionality where observing the behavior of an existing application is helpful. Debugging in general is a time-consuming, tedious task. Often debugging tools are provided to make the job a little less onerous.
Run time debugging tools are software tools that enable a developer or tester to monitor the execution of a program. The user can stop or pause the execution of the program, re-start it, set breakpoints, inspect values in memory, change values in memory and so on. Run time debugging tools provide information about a running instance of the program and are not able to provide information during design time.